package BanyuanClub.Study.Day0303;

/**
 * 内部类
 *  * 一个类中的类-内部类
 *  * 1.非静态内部类可以直接使用外部类的一切资源（属性、成员方法、静态变量、静态方法）
 *  * 2.静态内部类，不可以直接使用外部类的成员变量和成员方法
 *  * 3.非静态内部类里面不能定义静态变量和静态方法
 *  * 4.优先使用静态内部类
 */
public class Outer {
    private int outerNumber = 100;
    private int i = 50;

    //外部类的静态方法
    public static void staticOuterAdd(){

    }

    //外部类的方法
    public void outerAdd(){
        System.out.println("外部类的方法");
        //局部内部类，脱离局部则无法使用
        {
            class A{

            }
        }
    }

    class inner{
        private int innerNumber = 200;
        private int i = 40;

        public void add(){
            //访问外部类的同名成员变量
            System.out.println(Outer.this.i);
            //访问外部类的成员变量
            System.out.println(outerNumber);
            //访问外部类的静态方法
            staticOuterAdd();
            //访问外部类的方法
            outerAdd();

            System.out.println("内部类的方法");
        }
    }

    public static void main(String[] args) {
        //非静态内部类的使用方法
        Outer.inner inner = new Outer().new inner();
        //调用内部类的方法
        inner.add();

        //静态内部类的使用方法
        //Outer.Inner inner2 = new Outer.Inner();
    }
}
